package com.spzx.user.api;

import com.spzx.common.core.constant.SecurityConstants;
import com.spzx.common.core.constant.ServiceNameConstants;
import com.spzx.common.core.domain.R;
import com.spzx.user.api.domain.UserAddress;
import com.spzx.user.api.factory.RemoteUserAddressFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;

/**
 * 声明一个 Feign 客户端，用于远程调用用户地址服务。
 * 该接口定义了访问用户地址信息的方法，通过简单的接口调用来获取远程服务中的用户地址详情。
 */
@FeignClient(
        contextId = "remoteUserAddressService" ,
        value = ServiceNameConstants.USER_SERVICE,
        fallbackFactory = RemoteUserAddressFallbackFactory.class
)
public interface RemoteUserAddressService {

    /**
     * 根据用户地址 ID 获取用户地址信息。
     * 该方法将发送 GET 请求到远程用户服务的 /userAddress/getUserAddress/{id} 端点，
     * 并以 {@link R} 对象的形式返回用户地址信息。
     *
     * @param id 用户地址 ID，用于唯一标识一个用户地址。
     * @param source 请求来源标识符，用于指示请求来自何处。
     * @return 包含用户地址信息的响应结果。
     */
    @GetMapping(value = "/userAddress/getUserAddress/{id}")
    R<UserAddress> getUserAddress(
            @PathVariable("id") Long id,
            @RequestHeader(SecurityConstants.FROM_SOURCE) String source
    );
}
